package com.rd.student.jiaji.class3.sunguowei.day31;

import java.util.Arrays;
import java.util.Scanner;

public class TestRandom {
    public static void main(String[] args) {
        String all="郑成祥、王博、孙文卓、郑睿娴、王高博、李春泉、张睿、王星凯、柏云耀、高艺铭、周子贺、杜航、高晨曦、张思韬、孙昊、方周、郭佳宝、姜万里、李宏鸣、薛志鑫、王海鑫、夏银银、吴俊豪、王向阳、徐铭泽、张世煊、才雨鑫、孙国伟、秦嘉林、王岩博、石睿、杜雨坤、黄奕鸣、金洪宇、李鑫、王宇芳、苏岩";
        String[] allArr=all.split("、");
        System.out.println(allArr.length);
        for (int i = 0; i < allArr.length; i++) {
//            System.out.println(allArr[i]);

        }

        //随机n个
        //Random
        //Math.random()
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要随机的人数：");
        int n=scanner.nextInt();

        int len=allArr.length;
//        for (int i = 0; i < n; i++) {
           //随机的是  数组中的索引位置
            //[0,36]  37个元素
            //Math.random() 返回的是[0,1)范围内的一个伪随机数
            //0.01*37=0.37=0
            //0.01*37=3.7=3
            //0.90*37=33.3=33
            //0.00*37=36.63=36
//            int index=(int)(Math.random()*len);
//            System.out.println(allArr[index]);
//        }

        //如果再去重
        //数组去重
        //可以选择两种方式 1 对随机的索引去重  2 对随机后取出的元素去重

        //对于索引去重的方式
        //n=5 如果需要随机5次
        //indexArr={2,3,7}
        //当随机出现的索引时 6

        //随机出来的索引
//        int[] indexArr=new int[len];
//        //已经随机出的个数
//        int cnt=0;
//        int indexArrIndex=0;
//        for (int i = 0; i < n; i++) {
//            int index=(int)(Math.random()*len);
//
//            //判断是否已经随机过
//            boolean flag=false;
//            for (int j = 0; j < cnt; j++) {
//                if(index==indexArr[j]){
//                    flag=true;
//                    break;
//                }
//
//            }
//
//            //如果没有随机过 添加进数组中
//            if(!flag){
//                indexArr[cnt]=index;
//                cnt++;
//            }
//
//            if(flag){
//                i--;
//                continue;
//            }
//            System.out.println(allArr[index]);
//        }

        //数组去重的更好办法
        //allArr={}  [0,36]
        //indexArr={}  37个0 37个-1
        //2     indexArr[2]=2

        //用数组来记录已经出现过的索引
        // indexArr = {2,3}
        // 6  {2,3,6}  如果出现重复了  把随机的次数减1 代表要重新随机一次

        // 能不能不通过遍历数组的方式  来判断某个元素是否出现过
        // indexArr = {-1,-1,-1,-1}    37个-1
        // indexArr = {-1,-1,2,3}
        // 6  indexArr[6]

        int[] indexArr1=new int[len];
        for (int i = 0; i < indexArr1.length; i++) {
            indexArr1[i]=-1;

        }
        System.out.println(Arrays.toString(indexArr1));

        for (int i = 0; i < n; i++) {
            // [0,36]  在indexArr1的索引范围内
            // 可以通过数组索引来记录一个值是否出现过  而不再使用本身的元素
            int random=(int)(Math.random()*len);
            if(indexArr1[random]==-1){
                // 代表random没有出现过
                indexArr1[random]=random;
                System.out.println("本次随机出："+random);
                System.out.println(allArr[random]);
                System.out.println(Arrays.toString(indexArr1));
            }else {
                // 代表已经出现过  这一次随机不生效
                System.out.println("已经随机过："+random);
                i--;
            }

        }
    }
}
